热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

工具|benchmarksql使用指南

Benchm

一 前言

BenchmarkSQL是一款经典的开源数据库测试工具,其包含 TPCC 测试脚本,支持MySQL、Oracle 、EnterpriseDB、PostgreSQL以及SQL Server 等数据库的性能压力测试。本文介绍 基于 Linux 系统安装 benchmark-5.1 版本 并且测试 postgresql。

二  实践

2.1 下载

  1. 从github 直接下载源码进行编译安装

    git clone https://github.com/petergeoghegan/benchmarksql

  2. 安装ant 编译工具

    yum install -y ant

还有一种是直接从官网下载zip安装包,直接解压缩即可。

2.2 安装

鉴于 BenchmarkSQL 是使用Java语言开发的,所以在安装压测工具之前,必须先安装JDK 并且配置JAVA 环境变量

PATH=$PATH:$HOME/bin:/usr/local/polardb_o_current/binJAVA_HOME=/usr/local/jdk1.8.0_111export PATH=$JAVA_HOME/bin:$PATHexport CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

将对应的数据库驱动配置到 path/benchmarksql-5.1/lib/ 目录下,比如要针对pg进行压测,需要将驱动放到 path/benchmarksql-5.1/lib/postgres

2.3 配置

配置文件

//数据库类型,postgresdb=postgres //驱动程序,每种数据库有对应的驱动driver=org.postgresql.Driver  cOnn= jdbc:postgresql//127.0.0.1:5444/benchmarkuser=benchmarkpassword=benchmark//仓库数量warehouses=4    //初始化数据的加载进程数量,默认为4,实际使用可以结合os性能做配置loadWorkers=4   //终端数,即并发客户端数量,通常设置为CPU线程总数的2~6倍terminals=4  //每个终端运行的固定事务数量,如该值为10, 则每个terminal运行10个事务,如果有32个终端,那整体运行320个事务后,测试结束。该参数配置为非0值时,下面的runMins参数必须设置为0。runTxnsPerTerminal=0//runMins表示要压测的时间长度,单位为分钟。该值为非0值时,runTxnsPerTerminal参数必须设置为0。这两个参数不能同时设置为正整数,如果设置其中一个,另一个必须为0,主要区别是runMins定义时间长度来控制测试时间;runTxnsPerTerminal定义事务总数来控制时间。runMins=5//Number of total transactions per minutelimitTxnsPerMin=0//终端和仓库的绑定模式,设置为true时可以运行4.x兼容模式,意思为每个终端都有一个固定的仓库。设置为false时可以均匀的使用数据库整体配置。TPCC规定每个终端都必须有一个绑定的仓库,所以一般使用默认值true。terminalWarehouseFixed=true //下面五个值的总和必须等于100,默认值为:45, 43, 4, 4,4 ,与TPC-C测试定义的比例一致,实际操作过程中,可以调整比重来适应各种场景。newOrderWeight=45paymentWeight=43orderStatusWeight=4deliveryWeight=4stockLevelWeight=4

测试过程中的整体逻辑通过一个例子来说明:

  1. 假如limitTxnsPerMin参数使用默认300,termnals终端数量设置为150并发,实际会计算一个值A=limitTxnsPerMin/terminals=2(此处需要注意,A为int类型,如果terminals的值大于limitTxnsPerMin,得到的A值必然为0,为0时该参数失效),此处记住A=2;
  2. 接下来,在整个测试运行过程中,软件会记录一个事务的开始时间和结束时间,假设为B=2000毫秒;
  3. 然后用60000 ms除以A得到一个值C=60000/2=30000,假如事务运行时间BC,意味着事务超过了预期时间,那么马上进行下一个事务。在本例子中,每分钟300个事务,设置了150个并发,每分钟执行2个并发,每个并发执行2秒钟完成,每个并发sleep 28秒,这样可以保证一分钟有两个并发,反推回来整体并发数为300/分钟。

2.4 压测

benchmarksql 其实和 sysbench 使用方法类似,先生成压测数据,然后压测 ,收尾的时候。

生成数据

sh runDatabaseBuild.sh props.polar

该操作会生成10个表 和一个sequence 

压测

./runBenchmark.sh props.polar

+-------------------------------------------------------------+00:59:23,752 [main] INFO   jTPCC : Term-00,      BenchmarkSQL v5.1devel00:59:23,752 [main] INFO   jTPCC : Term-00, +-------------------------------------------------------------+00:59:23,752 [main] INFO   jTPCC : Term-00,  (c) 2003, Raul Barbosa00:59:23,752 [main] INFO   jTPCC : Term-00,  (c) 2004-2016, Denis Lussier00:59:23,754 [main] INFO   jTPCC : Term-00,  (c) 2016, Jan Wieck00:59:23,754 [main] INFO   jTPCC : Term-00, +-------------------------------------------------------------+00:59:23,754 [main] INFO   jTPCC : Term-00,00:59:23,755 [main] INFO   jTPCC : Term-00, db=postgres00:59:23,755 [main] INFO   jTPCC : Term-00, driver=com.aliyun.polardb.Driver00:59:23,755 [main] INFO   jTPCC : Term-00, cOnn=jdbc:polardb://127.0.0.1:5444/benchmark00:59:23,755 [main] INFO   jTPCC : Term-00, user=benchmark00:59:23,755 [main] INFO   jTPCC : Term-00,00:59:23,755 [main] INFO   jTPCC : Term-00, warehouses=400:59:23,755 [main] INFO   jTPCC : Term-00, terminals=400:59:23,757 [main] INFO   jTPCC : Term-00, runMins=500:59:23,757 [main] INFO   jTPCC : Term-00, limitTxnsPerMin=000:59:23,757 [main] INFO   jTPCC : Term-00, terminalWarehouseFixed=true00:59:23,758 [main] INFO   jTPCC : Term-00, useStoredProcedures=null00:59:23,758 [main] INFO   jTPCC : Term-00,00:59:23,758 [main] INFO   jTPCC : Term-00, newOrderWeight=4500:59:23,758 [main] INFO   jTPCC : Term-00, paymentWeight=4300:59:23,758 [main] INFO   jTPCC : Term-00, orderStatusWeight=400:59:23,758 [main] INFO   jTPCC : Term-00, deliveryWeight=400:59:23,758 [main] INFO   jTPCC : Term-00, stockLevelWeight=400:59:23,758 [main] INFO   jTPCC : Term-00,00:59:23,758 [main] INFO   jTPCC : Term-00, resultDirectory=null00:59:23,758 [main] INFO   jTPCC : Term-00, osCollectorScript=null00:59:23,758 [main] INFO   jTPCC : Term-00,00:59:23,874 [main] INFO   jTPCC : Term-00, C value for C_LAST during load: 16500:59:23,875 [main] INFO   jTPCC : Term-00, C value for C_LAST this run:    23700:59:23,875 [main] INFO   jTPCC : Term-00,Term-00, Running Average tpmTOTAL: 37572.94    Current tpmTOTAL: 1239168    Memory Usage: 787MB / 1042MB01:04:24,135 [Thread-2] INFO   jTPCC : Term-00,01:04:24,135 [Thread-2] INFO   jTPCC : Term-00,01:04:24,135 [Thread-2] INFO   jTPCC : Term-00, Measured tpmC (NewOrders) = 16982.4901:04:24,135 [Thread-2] INFO   jTPCC : Term-00, Measured tpmTOTAL = 37572.67
01:04:24,135 [Thread-2] INFO   jTPCC : Term-00, Session Start     = 2021-10-17 00:59:24
01:04:24,135 [Thread-2] INFO   jTPCC : Term-00, Session End       = 2021-10-17 01:04:24
01:04:24,135 [Thread-2] INFO   jTPCC : Term-00, Transaction Count = 187868

结果解释

Running Average tpmTOTAL:每分钟平均执行事务数(所有事务) 

Memory Usage:客户端内存使用情况 

Measured tpmC (NewOrders) :每分钟执行的事务数(只统计NewOrders事务) 

Transaction Count:执行的交易总数量

删除数据

./runDatabaseDestroy.sh props.polar

2.5  报告解析和生成html报告

benchmarksql 除了提供文字版输出, 还有 通过工具生成 html版本的报告 ,不过需要安装R语言和提前配置

resultDirectory=poc_%tY-%tm-%td_%tH%tM%tS
压测结束之后,使用命令

sh generateReport.sh  poc_2021-10-17_191525

其中 poc_2021-10-17_191525 为 报告的路径。比如此次测试的案例的结果如下:


三 总结

工欲善其事必先利其器,不过工具只是其中的一部分,性能优化的路还很长,还需要结合OS系统网络,cpu,io ,db系统整体进行调优。



推荐阅读
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • Jboss的EJB部署描述符standardjaws.xml配置步骤详解
    本文详细介绍了Jboss的EJB部署描述符standardjaws.xml的配置步骤,包括映射CMP实体EJB、数据源连接池的获取以及数据库配置等内容。 ... [详细]
  • Python已成为全球最受欢迎的编程语言之一,然而Python程序的安全运行存在一定的风险。本文介绍了Python程序安全运行需要满足的三个条件,即系统路径上的每个条目都处于安全的位置、"主脚本"所在的目录始终位于系统路径中、若python命令使用-c和-m选项,调用程序的目录也必须是安全的。同时,文章还提出了一些预防措施,如避免将下载文件夹作为当前工作目录、使用pip所在路径而不是直接使用python命令等。对于初学Python的读者来说,这些内容将有所帮助。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 本文讨论了如何在codeigniter中识别来自angularjs的请求,并提供了两种方法的代码示例。作者尝试了$this->input->is_ajax_request()和自定义函数is_ajax(),但都没有成功。最后,作者展示了一个ajax请求的示例代码。 ... [详细]
  • PDO MySQL
    PDOMySQL如果文章有成千上万篇,该怎样保存?数据保存有多种方式,比如单机文件、单机数据库(SQLite)、网络数据库(MySQL、MariaDB)等等。根据项目来选择,做We ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • 本文介绍了在Go语言中可见性与scope的规则,包括在函数内外声明的可见性、命名规范和命名风格,以及变量声明和短变量声明的语法。同时,还介绍了变量的生命周期,包括包级别变量和局部变量的生命周期,以及变量在堆和栈上分配的规则和逃逸分析的概念。 ... [详细]
author-avatar
King347
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有